<div style="border: 3px red solid; background: #fcc; color: #600;">
<p><strong>NOTE: </strong>Development on the existing series (0.1 - 0.3+) of vss2svn has been discontinued. I am currently working on a complete rewrite of this script which will be released as version 0.10. This version will use a newly developed VSS backend interpreter and should produce much more accurate results much more quickly.</p>
<p>You can still receive help for the "legacy" project from the users mailing list (see link at left),
but remaining bugs in the code may or may not get fixed. Maintenance for the current project may continue on a volunteer basis.</p>
<p>Toby Johnson <br />
7 Oct 2005</p>
</div>
<h4>Description</h4>
<p><strong>vss2svn</strong> is a Perl script to migrate revision history from a Microsoft Visual SourceSafe (VSS) database to the <a href="http://subversion.tigris.org">Subversion</a> version control system. It will migrate all revision history, including comments, author names, and optionally revision dates (migrating dates uses a not-officially-supported feature of Subversion and can only be done if you are migrating to a brand-new Subversion repository).</p>

<p>This project has nothing to do with the <a href="http://www.contactor.se/~dast/svn/archive-2003-07/1158.shtml">vss2svn.py</a> Python script which is floating around. Its methodology is loosely based on the <a href="http://www.riseup.com/~brettw/dev/VSS2Subversion.html">migrate.pl</a> script I found after some googling; however, I was not able to get that script to work properly and decided to start from scratch rather than try to modify it.</p>

<h4>Status</h4>
<p>This project is still considered Alpha quality, meaning it is still very much a work in progress, and anything can and will change. However, the basic functionality of this program is already in place, and several large VSS databases have already been successfully converted.</p>

<p>This script works by querying the existing VSS database for all changes ever made, arranging those changes in chronological order, checking them out of VSS one at a time, and then checking them in to Subversion. Additionally, it attempts to create atomic commits where possible (even though VSS doesn't support this feature!) by treating VSS checkins with the same author, date, and comment as a single Subversion revision. As you can imagine, all of this is a rather slow process. However, given VSS's <a href="http://www.wadhome.org/svn_vs_vss.txt">well-known penchant</a> for <a href="http://www.highprogrammer.com/alan/windev/sourcesafe.html">corrupting and/or losing users' data</a>, it's worth it to move to a real version control system!</p>

<h4>Project Source Code</h4>
<p>To check out project source code using <b>svn</b>, use the following command:</p>

<p><code>
svn checkout http://vss2svn.tigris.org/svn/vss2svn/trunk vss2svn --username <em>username</em>
</code></p>

<p>You can also browse the repository at <a href="http://vss2svn.tigris.org/source/browse/vss2svn/">http://vss2svn.tigris.org/source/browse/vss2svn/</a></b>, which is always available from the "Subversion" link in the left-hand menu. <b>WARNING</b>: the latest code in /trunk may not be in a usable state at any given point in time. Unless you're interested in checking out the latest code for development reasons, please grab the latest zipfile from the <a href="http://vss2svn.tigris.org/servlets/ProjectDocumentList?folderID=2789">release</a> folder in the downloads section.</p>

<h4>Proposed Milestone Timeline</h4>
<table>
<tr style="text-align: left">
	<th>Status</th>
	<th>Version</th>
	<th>Notes</th>
</tr>
<tr>
	<td style="background-color: #9ff; color: blue; border: 2px blue solid; text-align: center; vertical-align: middle;">
        PLANNED
    </td>
	<td>0.11</td>
	<td>Add support for converting labels, shares, and other VSS features. This will be the basis of the 1.0 release.</td>
</tr>
<tr>
	<td style="background-color: #fc9; color: #f60; border: 2px #f60 solid; text-align: center; vertical-align: middle;">
        IN PROGRESS
    </td>
	<td>0.10</td>
	<td>Complete rewrite of the script using Dirk Luetjen's "ssphys" backend parser. This version will not be feature-complete and will not include support for labels, shares, or other non-trivial VSS actions. Support restartability at every step of the migration.</td>
</tr>
<tr>
	<td style="background-color: pink; color: red; border: 2px red solid; text-align: center; vertical-align: middle;">
        CANCELED</td>
	<td>0.4</td>
	<td>Internationalization: move English-specific code to easily-customizable strings, recognize SourceSafe output in multiple languages, etc. Allow conversion to be restarted if interrupted. Add better label-handling logic to prevent polluting comments.</td>
</tr>
<tr>
	<td style="background-color: lightgreen; color: green; border: 2px green solid; text-align: center; vertical-align: middle;">
        COMPLETE
    </td>
	<td><a href="http://vss2svn.tigris.org/servlets/ProjectDocumentList?folderID=2789">0.3</a></td>
	<td>Make more user-friendly with better error messages, etc. Recognize multiple date and time formats in SourceSafe, depending on user's locale setting.</td>
</tr>
<tr>
	<td style="background-color: lightgreen; color: green; border: 2px green solid; text-align: center; vertical-align: middle;">
        COMPLETE
    </td>
	<td><a href="http://vss2svn.tigris.org/servlets/ProjectDocumentList?folderID=2789">0.2</a></td>
	<td>Use DBD::SQLite instead of temporary text files</td>
</tr>
<tr>
	<td style="background-color: lightgreen; color: green; border: 2px green solid; text-align: center; vertical-align: middle;">
        COMPLETE
    </td>
	<td><a href="http://vss2svn.tigris.org/servlets/ProjectDocumentList?folderID=2789">0.1</a></td>
	<td>Initial import of script</td>
</tr>
</table>

<h4>Downloading Instructions</h4>

<h5>Perl Script</h5>
<p>You can download the Perl script <a href="http://vss2svn.tigris.org/servlets/ProjectDocumentList?folderID=2789">from the Release folder</a> of the Documents and Files section. See the INSTALL.txt file within the release for instructions on running the script.</p>

<h5>Win32 Executable</h5>
<p>Since this program is still considered Alpha quality, I highly recommend running the Perl script if at all possible. This will help you to help me to help you if there's a problem. :) However, if installing Perl isn't an option for you, or you want to get up and running as quickly as possible, I also provide the latest released version as a Win32 statically-built executable. This file is somewhat large (over a meg) because it includes the entire Perl interpreter and helper modules.</p>

<p>You can download the Win32 executable <a href="http://vss2svn.tigris.org/servlets/ProjectDocumentList?folderID=2802">from the win32 folder</a> of the Documents and Files section.</p>

<h4>Where To Go For Help</h4>
<p>If you need help running this script, or encounter errors, please go to the <a href="http://vss2svn.tigris.org/servlets/ProjectMailingListList">mailing list</a> instead of emailing me directly. If you don't wish to subscribe to the list, you can still send an email to users@vss2svn.tigris.org even without subscribing, and ask that you be copied on any replies.</p>
<p>Another useful resource in deciphering the sometimes confusing VSS error messages you may encounter is available at <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/guides/html/vsorierrormessages.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/guides/html/vsorierrormessages.asp</a>.
</p>